<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //   //   1. 函数参数默认值;

      //   //在 ES6 以前，我们无法给一个函数参数设置默认值，只能采用变通写法：
      //   function add(a, b) {
      //     // 判断 b 是否为空，为空就给默认值 1
      //     b = b || 1;
      //     return a + b;
      //   }
      //   // 传一个参数
      //   console.log(add(10));

      //   //现在可以这么写：直接给参数写上默认值，没传就会自动使用默认值
      //   function add2(a, b = 1) {
      //     return a + b;
      //   }
      //   // 传一个参数
      //   console.log(add2(10));

      //   //2. 不定参数
      //   // 不定参数用来表示不确定参数个数，形如，...变量名， 由... 加上一个具名参数标识符组成。具名参数 只能放在参数列表的最后，并且有且只有一个不定参数
      //   function fun(... values) {
      //     console.log(values.length);
      //   }
      //   fun(1, 2); //2
      //   fun(1, 2, 3, 4); //4

      // 3.箭头函数
      // 一个参数时：
      //   var print = (obj) => console.log(obj);
      var print = (para) => console.log(para);
      print("hello");

      // 两个参数的情况：
      var sum = function (a, b) {
        return a + b;
      };
      // 简写为：
      //当只有一行语句，并且需要返回结果时，可以省略 {} , 结果会自动返回。
      var sum2 = (a, b) => a + b;
      //测试调用
      console.log(sum2(10, 10)); //20
      // 代码不止一行，可以用`{}`括起来
      var sum3 = (a, b) => {
        c = a + b;
        return c;
      };
      //测试调用
      console.log(sum3(10, 20)); //30

      //   实战：箭头函数结合解构表达式
      //需求，声明一个对象，hello 方法需要对象的个别属性
      //以前的方式：
      const person = {
        name: "jack",
        age: 21,
        language: ["java", "js", "css"],
      };
      function hello(person) {
        console.log("hello," + person.name);
      }

      var hello2 = (obj) => console.log("hello" + obj.name);

      hello2(person);

      var hello3 = ({name}) =>console.log("hello" + name);
      hello3(person);
    </script>
  </body>
</html>
